/*!
 * \file WTSError.hpp
 * \project	WonderTrader
 *
 * \author Wesley
 * \date 2020/03/30
 * 
 * \brief 错误信息管理类定义文件
 */
#pragma once
#include "WTSObject.hpp"
#include "WTSTypes.h"

NS_WTP_BEGIN

/*!
 * \brief 错误信息类，用于封装和管理系统运行时的错误信息
 * 
 * \details 该类提供统一的错误信息管理机制，包括：
 *          - 错误代码的标准化管理
 *          - 错误消息的文本描述
 *          - 错误信息的创建和查询接口
 *          主要用于系统各个模块间的错误信息传递和处理
 * 
 * \author Wesley
 * \date 2020/03/30
 */
class WTSError : public WTSObject
{
protected:
	/*!
	 * \brief 默认构造函数
	 * 
	 * \details 初始化错误代码为WEC_NONE（无错误），错误消息为空字符串
	 */
	WTSError():m_errCode(WEC_NONE),m_strMsg(""){}
	
	/*!
	 * \brief 虚析构函数
	 * 
	 * \details 确保派生类能够正确析构，释放相关资源
	 */
	virtual ~WTSError(){}

public:
	/*!
	 * \brief 创建错误信息对象的静态工厂方法
	 * 
	 * \details 通过指定的错误代码和错误消息创建一个新的错误信息对象，
	 *          提供统一的错误对象创建接口
	 * 
	 * \param ec 错误代码，使用WTSErroCode枚举值
	 * \param errmsg 错误消息的文本描述，提供详细的错误信息说明
	 * 
	 * \return 创建成功的错误信息对象指针
	 * 
	 * \note 返回的对象需要调用者负责内存管理
	 * 
	 * \warning 传入的errmsg字符串应该是有效的，避免传入NULL指针
	 */
	static WTSError* create(WTSErroCode ec, const char* errmsg)
	{
		WTSError* pRet = new WTSError;
		pRet->m_errCode = ec;
		pRet->m_strMsg = errmsg;

		return pRet;
	}

	/*!
	 * \brief 获取错误消息文本
	 * 
	 * \details 返回该错误对象包含的详细错误消息描述，用于日志记录、
	 *          用户提示或调试分析
	 * 
	 * \return 错误消息的C风格字符串指针，不会为NULL
	 */
	const char*		getMessage() const{return m_strMsg.c_str();}
	
	/*!
	 * \brief 获取错误代码
	 * 
	 * \details 返回该错误对象的标准化错误代码，用于程序逻辑判断和
	 *          错误类型分类处理
	 * 
	 * \return WTSErroCode枚举值，表示具体的错误类型
	 */
	WTSErroCode		getErrorCode() const{return m_errCode;}

protected:
	WTSErroCode		m_errCode;		//错误代码
	std::string		m_strMsg;		//错误消息文本
};


NS_WTP_END